import random
from faker import Faker
import re

fake = Faker(locale='zh_CN')

def generate_employee_data(num=100):
    data = []
    educations = ['初中', '高中', '中专', '大专', '本科', '硕士', '博士']
    departments = ['ZH', 'BJ', 'SH', 'GZ', 'CD', 'WH', 'XA', 'NJ', 'SZ', 'HZ']

    for i in range(1, num + 1):
        # 生成职工号（部门代码+3位数字）
        dept = random.choice(departments)
        emp_id = f"{dept}{i:03d}"

        # 生成随机姓名（确保非空）
        name = fake.name()

        # 生成年龄（18-60岁，符合TINYINT UNSIGNED范围）
        age = random.randint(18, 60)

        # 生成性别（确保男/女）
        gender = random.choice(['男', '女'])

        # 生成学历（从预设列表中选择）
        education = random.choice(educations)

        # 生成工资（3000-30000，符合INT UNSIGNED）
        salary = random.randint(3000, 30000)

        # 生成地址（确保非空）
        address = fake.address().strip()

        # 生成电话号码（确保11位数字）
        raw_phone = fake.phone_number()
        phone = re.sub(r'\D', '', raw_phone)[:11]  # 提取纯数字并取前11位
        if not phone:  # 兜底方案
            phone = '138' + ''.join(random.choices('0123456789', k=8))

        # 构建数据行（确保所有字段都有值）
        row = [
            emp_id,
            name,
            str(age),
            gender,
            education,
            str(salary),
            address,
            phone
        ]

        # 确保没有空字段（虽然逻辑上已保证，但保留最终检查）
        row = [field if field else 'N/A' for field in row]
        data.append('\t'.join(row))

    return '\n'.join(data)

# 生成数据并保存到文件
if __name__ == '__main__':
    data = generate_employee_data()
    output_path = r'F:/Python/Level One/python_classDesigh/res/employee_test_data.txt'
    with open(output_path, 'w', encoding='utf-8') as f:
        f.write(data)
    print(f"已生成100条测试数据到 {output_path} 文件")